package dome1;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Parameter;

public class MyReflectDemo {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        //1.获取class字节码文件对象
        Class clazz = Class.forName("dome1.Student");

//        //2.获取构造方法
//        Constructor[] cons = clazz.getDeclaredConstructors();
//        for (Constructor con : cons) {
//            System.out.println(con);
//        }

        Constructor con2 = clazz.getDeclaredConstructor(String.class);
        con2.setAccessible(true);//相当于临时取消修饰权限校验

        //此时我们已经拿到了构造方法，那么我们就可以通过此构造方法去创建对象
        Student stu = (Student) con2.newInstance("张三");
        System.out.println(stu);


        //我们单独获取构造方法，往里面添加参数，就可以指定获取那个构造方法
        //System.out.println(con2);

        int modifiers = con2.getModifiers();
        //获取构造方法的权限修饰符，以整数形式体现
        //System.out.println(modifiers);

//        Parameter[] parameters = con2.getParameters();
//        //获取构造方法所有参数
//        for (Parameter x : parameters) {
//            System.out.println(x);
//        }


    }
}
